#ifndef HTTPHELPER_H
#define HTTPHELPER_H
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QObject>
#include <memory>
#include <QVector>
#include <QVariantMap>
#include <map>
//http登录状态
enum REQUESTTYPE{
    REGISTER = 1,
    LOGIN,
    LOGINOUT,
    MEDIALIST,
    ADDMEDIA,
    EDITMEDIA,
    REMOVEMEDIA,
};

//代码格式对其 ctrl+a,ctrl+i（对其）
class HttpHelper : public QObject
{
    Q_OBJECT
public:
    static HttpHelper* instance();
    ~HttpHelper() = default;
signals:
    //信号是没有返回值
    void sig_Operator(const REQUESTTYPE type,bool result);
    void sig_MediaInfo(const QVector<QVariantMap> mediainfo);

public slots:

    void slot_GetmediaInfo();//获取媒体信息列表
    void slot_Regeister(const QVariantMap& infomap);//用户注册
    void slot_Login(const QVariantMap& infomap);//用户登录
    void slot_LoginOut(const QVariantMap& infomap);//用户注销
    void slot_AddmediaInfo(const QVariantMap& infomap);//添加媒体
    void slot_EditmediaInfo(const QVariantMap& infomap);//修改媒体
    void slot_RemovemediaInfo(const QVariantMap& infomap);//删除媒体

protected:
    void HandleReply(const QByteArray& data);//解析网络返回的原始数据
    void onReplyFinished(QNetworkReply* reply);//处理请求完成事件（成功/失败）
    void sendGetRequest(const QNetworkRequest& request);//发送 GET 请求
    void sendPostRequest(QNetworkRequest& request,const QByteArray& data);//发送 POST 请求
    void sendRequest(const REQUESTTYPE type,bool isPost,const QByteArray data = QByteArray());//统一封装 GET/POST 请求

private:
    //单例模式（Singleton） 的 HttpHelper 类的私有部分，主要用于封装 HTTP 网络请求功能
    explicit HttpHelper(QObject *parent = nullptr);
    HttpHelper(const HttpHelper&) = delete;
    HttpHelper& operator = (const HttpHelper&) = delete;
private:
    //存储身份认证令牌（如 JWT Token），用于在 HTTP 请求头中携带
    QString token;
    static std::unique_ptr<HttpHelper> instance_;
    QNetworkAccessManager* networkManager = nullptr;
    std::map<REQUESTTYPE,QString> requestAddrs;

signals:

};

#endif // HTTPHELPER_H
